package com.djx.threadstudy.lock;


import lombok.SneakyThrows;

/**
 * @ClassName LockTest01
 * @Date 2021/7/9 0009 上午 10:19
 * @Author Administrator
 * @Description TODO
 * Version 1.0
 */
public class LockTest04 {

    /**
     * 被synchronized和static修饰的方法，锁的对象是类的class对象。仅仅被synchronized修饰的方法，锁的对象是方法的调用者。因为两个方法锁的对象不是同一个，所以两个方法用的不是同一个锁，后调用的方法不需要等待先调用的方法。
     *
     *
     * @param args
     */

    public static void main(String[] args) {
        Phone04 phone1 = new Phone04();
        Phone04 phone2 = new Phone04();
        new Thread(() -> { phone1.call(); }, "A").start();
        new Thread(() -> { Phone04.sendSms(); }, "B").start();
    }
}

class Phone04 {

    public static synchronized void sendSms() {
        System.out.println("发短信: "+Thread.currentThread().getName());
    }

    @SneakyThrows
    public synchronized void call() {
        Thread.sleep(3009);
        System.out.println("打电话: "+Thread.currentThread().getName());
    }

    public  void sendWechat() {
        System.out.println("发微信: "+Thread.currentThread().getName());
    }
}
